import { defineStore } from 'pinia'
import { ref } from 'vue'
import { v4 as uuidv4 } from 'uuid'
import request from '@/utils/request'

export const useChatStore = defineStore('chat', () => {
  // 当前对话ID
  const currentChatId = ref('')
  // 历史对话列表
  const chatHistory = ref([])
  // 存储所有历史对话
  const historyDialogs = ref({})
  // 处理后的历史对话列表
  const processedHistory = ref([])

  // 添加常量定义最大显示数量
  const MAX_HISTORY_ITEMS = 6

  // 创建新对话
  const createNewChat = () => {
    const newChatId = uuidv4()
    currentChatId.value = newChatId
    return newChatId
  }

  // 添加历史记录
  const addHistory = (historyData) => {
    // 先保存到历史记录
    chatHistory.value.unshift(historyData)
    
    // 重新获取最新的历史对话列表
    fetchHistoryList()
  }

  // 获取历史对话列表
  const fetchHistoryList = async () => {
    try {
      const res = await request({
        method: 'GET',
        url: '/bl/historychat/list'
      })
      if (res.data.code === 200) {
        historyDialogs.value = res.data.data
        
        // 处理每个对话组
        const processedData = Object.entries(res.data.data).map(([chatId, messages]) => {
          // 按时间排序消息
          const sortedMessages = [...messages].sort((a, b) => 
            new Date(a.time).getTime() - new Date(b.time).getTime()
          )
          
          // 使用第一条消息的时间和内容
          const firstMessage = sortedMessages[0]
          
          return {
            chatId,
            title: firstMessage?.ask || '新对话',
            firstMessageTime: firstMessage?.time,
            messages: sortedMessages
          }
        })

        // 按照第一条消息的时间升序排序（最早的在上面）
        processedHistory.value = processedData
          .sort((a, b) => {
            console.log('Comparing first message times:', {
              a: a.firstMessageTime,
              b: b.firstMessageTime
            })
            // 确保时间存在
            if (!a.firstMessageTime) return 1
            if (!b.firstMessageTime) return -1
            return b.firstMessageTime.localeCompare(a.firstMessageTime)
          })
          .slice(0, MAX_HISTORY_ITEMS)

        console.log('Processed history:', processedHistory.value)
      }
    } catch (error) {
      console.error('获取历史对话失败:', error)
    }
  }

  // 设置当前对话ID
  const setCurrentChatId = (chatId) => {
    currentChatId.value = chatId
  }

  // 清空历史对话
  const clearHistory = () => {
    historyDialogs.value = {}
    processedHistory.value = []
    currentChatId.value = ''
    chatHistory.value = []
  }

  return {
    currentChatId,//当前对话ID
    chatHistory,//历史对话列表
    historyDialogs,//存储所有历史对话
    processedHistory,//处理后的历史对话列表
    createNewChat,//创建新对话
    addHistory,//添加历史记录
    fetchHistoryList,//获取历史对话列表
    setCurrentChatId,//设置当前对话ID
    clearHistory//清空历史对话
  }
}, { persist: true }) 